GtkEntry: Focus the entry without selecting the text
authorBastien Nocera <hadess@hadess.net>
Tue, 21 May 2013 16:26:48 +0000 (18:26 +0200)
committerBastien Nocera <hadess@hadess.net>
Thu, 23 May 2013 18:53:30 +0000 (20:53 +0200)
Focusing the text entry without selecting all the text is needed in
some places (GtkTreeView, and some uses of GtkSearchEntry) so
create a private helper to avoid replicating the hacks.

https://bugzilla.gnome.org/show_bug.cgi?id=700787

gtk/gtkentry.c
gtk/gtkentryprivate.h

index 3fefc249ae68dbe85a01581bd48cd8dd764a35c4..8a7d9e08504948c5e21ab40db895bb4008166272 100644 (file)
@@ -4725,6 +4725,15 @@ gtk_entry_focus_out (GtkWidget     *widget,
   return FALSE;
 }
 
+void
+_gtk_entry_grab_focus (GtkEntry  *entry,
+                       gboolean   select_all)
+{
+  GTK_WIDGET_CLASS (gtk_entry_parent_class)->grab_focus (GTK_WIDGET (entry));
+  if (select_all)
+    gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1);
+}
+
 static void
 gtk_entry_grab_focus (GtkWidget *widget)
 {
@@ -4732,8 +4741,6 @@ gtk_entry_grab_focus (GtkWidget *widget)
   GtkEntryPrivate *priv = entry->priv;
   gboolean select_on_focus;
 
-  GTK_WIDGET_CLASS (gtk_entry_parent_class)->grab_focus (widget);
-
   if (priv->editable && !priv->in_click)
     {
       g_object_get (gtk_widget_get_settings (widget),
@@ -4741,8 +4748,11 @@ gtk_entry_grab_focus (GtkWidget *widget)
                     &select_on_focus,
                     NULL);
 
-      if (select_on_focus)
-        gtk_editable_select_region (GTK_EDITABLE (widget), 0, -1);
+      _gtk_entry_grab_focus (entry, select_on_focus);
+    }
+  else
+    {
+      _gtk_entry_grab_focus (entry, FALSE);
     }
 }
 
index 0cc825a40591f7801f20ff63b7addb70c68ad32a..9d6f1e97e2b9707d4797ac2861a5a0c9a8a45c7e 100644 (file)
@@ -87,7 +87,8 @@ void     _gtk_entry_get_borders            (GtkEntry  *entry,
 GtkIMContext* _gtk_entry_get_im_context    (GtkEntry  *entry);
 void     _gtk_entry_set_is_cell_renderer   (GtkEntry  *entry,
                                             gboolean   is_cell_renderer);
-
+void     _gtk_entry_grab_focus             (GtkEntry  *entry,
+                                            gboolean   select_all);
 
 G_END_DECLS